iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
Mobile Development

我的 Flutter 進化論:30 天打造「Crew Up!」的架構之旅系列 第 28

Day 28 - Cursor 進階功能 + Figma MCP:解決設計與開發的鴻溝

  • 分享至 

  • xImage
  •  

大家好,歡迎來到第二十八天!在 Day 27,我們學習了 Cursor 的三大基本模式(Agent、Plan、Ask)。今天,我們要深入探討 Cursor 的進階功能,以及為什麼要使用 Figma MCP 來解決設計與開發之間的痛點。

在開發過程中,我們常常遇到這些問題:

  • 😣 設計師改了按鈕顏色,要手動複製色碼到程式碼
  • 😣 設計稿的字體大小、間距、圓角,要一個一個對照實作
  • 😣 設計更新了,不知道哪些元件需要跟著改
  • 😣 UI 元件和設計稿不一致,視覺 QA 來回修改

Figma MCP 就是為了解決這些問題而生。

主要內容

  • Cursor 進階功能:@ 符號系統的強大功能
  • 為什麼需要 Figma MCP:設計開發一體化的實際痛點與解決方案
  • Figma MCP 實際應用:從設計稿到程式碼的自動化工作流程
  • 完整工作流程:Cursor + Figma MCP 在 Crew Up 專案中的實戰應用

第一部分:Cursor 進階功能

1. @ 符號系統:Cursor 的殺手級功能

在 Day 27,我們學習了基本的三大模式。現在讓我們深入了解 Cursor 獨有的 @ 符號系統,這些功能是 VS Code 或其他編輯器完全沒有的。

符號 功能 實際應用
@Codebase 理解整個專案並搜索 「@Codebase 專案中所有的錯誤處理模式是什麼?」
@Files & Folders 引用特定檔案或資料夾 「@README.md」、「@features/auth/」
@Docs 查詢技術文檔 「@Docs flutter routing 如何實作?」
@Web 即時網路搜索 「@Web Flutter 3.19 有哪些新功能?」
@Git 理解 Git 歷史和變更 「@Git activity_provider.dart 最近的變更記錄」
@URL 讀取網頁或設計稿內容 「@https://figma.com/...」、「@https://...」

為什麼這些功能這麼重要?

這些功能不只是簡單的搜索,而是真正理解程式碼的語意和上下文。

實戰範例 1:使用 @Codebase 理解專案模式

問題:「@Codebase 我們在 Crew Up 專案中如何處理非同步錯誤?」

Cursor 會:
1. 分析整個專案的錯誤處理模式
2. 找出 Result<T> 的使用方式
3. 解釋 AppException 的設計
4. 提供統一的實作建議

這比手動搜尋「error」、「exception」然後逐一檢查每個檔案快多了!

2. 自然語言程式碼搜索

Cursor 不只是關鍵字搜索,而是理解你的意圖

對比:

❌ 傳統搜索(VS Code):
搜索關鍵字 "firebase auth error"
→ 找到所有包含這些字的地方,但不一定相關

✅ Cursor 自然語言搜索:
「我們在哪裡處理 Firebase 認證錯誤並轉換成 AppException?」
→ 直接找到 auth_remote_datasource.dart 中的錯誤處理邏輯
→ 理解為什麼要這樣設計
→ 提供改善建議

第二部分:為什麼需要 Figma MCP?

痛點:設計與開發的鴻溝

傳統開發流程的問題:

  1. 開發者需要頻繁切換 Figma 和編輯器,複製色碼、數值
  2. 設計變更時,要手動找出所有使用該顏色的地方並更新
  3. 視覺 QA 需要逐一對照設計稿和實作

時間消耗:

  • 實作一個按鈕:約 30 分鐘
  • 設計更新:1-2 小時
  • 整個 App 的 UI 元件:40-60 小時

Figma MCP 解決了什麼問題?

Figma MCP 讓 Cursor 直接讀取 Figma 設計檔案:

  • 在 Cursor 中查詢:使用 @Figma-URL 直接讀取設計規格,不用切換視窗
  • 即時對照:AI 可以比對 Figma 設計與程式碼差異
  • 簡化變更:設計更新後直接查詢最新規格

效率提升:2-3 倍,更重要的是工作流程更順暢


第三部分:Figma MCP 實際應用

1. 環境設置

在 Crew Up 專案中,我們使用 Figma 本地 MCP Server,透過 Figma 桌面版來連接。

為什麼選擇本地 Server?

  • ✅ 設置簡單、免費
  • ✅ 無需額外認證
  • ✅ 適合個人開發者和小團隊

參考:Figma MCP Server 官方指南


設置步驟

步驟 1:在 Figma 桌面版啟用 Local MCP Server

  1. 更新 Figma 桌面版到最新版本
  2. 打開任一 Figma 檔案
  3. 在左上角,點擊 Figma 選單(Mac 在工具列,Windows 在應用內)
  4. 選擇 PreferencesEnable local MCP server
  5. 底部會出現確認訊息:Server 已在 http://127.0.0.1:3845/mcp 執行

步驟 2:在 Cursor 中設定 MCP Server

  1. 建立或編輯 MCP 設定檔:

    # Mac/Linux
    ~/.cursor/mcp.json
    
    # Windows
    %USERPROFILE%\.cursor\mcp.json
    
  2. 加入 Figma Server 設定:

    {
      "mcpServers": {
        "Figma": {
          "url": "http://127.0.0.1:3845/mcp"
        }
      }
    }
    
  3. 重新啟動 Cursor 讓設定生效

⚠️ 重要提醒:

  • ✅ Figma 桌面版必須保持開啟(Server 才會執行)
  • ✅ 確認已啟用 Local MCP Server(Preferences 中檢查)
  • ✅ 如果無法連接,試著關閉再重新啟用 MCP Server

2. 確認與測試

方法 1:檢查 MCP 設定檔

確認 ~/.cursor/mcp.json 包含正確的設定:

{
  "mcpServers": {
    "Figma": {
      "url": "http://127.0.0.1:3845/mcp"
    }
  }
}

方法 2:在 Cursor 中測試連接

在 Cursor 中輸入:

@https://www.figma.com/design/YOUR_FILE_KEY/...?node-id=xxx

請告訴我這個元件的名稱和設計規格

✅ 成功的回應: Cursor 會返回具體的設計資訊(元件名稱、顏色、尺寸等)

❌ 失敗的回應: 返回空白內容或錯誤訊息

常見問題排查:

問題 可能原因 解決方式
返回空白內容 本地 Server 未執行 ✅ 打開 Figma 桌面版✅ 確認已啟用 Local MCP Server
無法連接 Server 未啟動 ✅ 重新啟動 Figma 桌面版✅ 檢查 Preferences 設定
權限錯誤 無 Figma 檔案存取權 ✅ 確認您的 Figma 帳號有檔案權限
讀取失敗 Styles 未發佈 ✅ 在 Figma 中發佈 Color/Text Styles
Port 衝突 3845 port 被佔用 ✅ 關閉其他使用該 port 的應用

💡 本地 Server 特別提醒:

  • Figma 桌面版必須保持開啟
  • 檢查 Figma → Preferences 中 "Enable local MCP server" 是否已勾選
  • 重新啟動 Figma 桌面版通常能解決連接問題

3. 準備 Figma 設計稿

步驟 1:取得 Figma 連結

從 Figma 中複製要使用的 Frame 或 Component 連結:

https://www.figma.com/design/YOUR_FILE_KEY/Project-Name?node-id=123-456

在 Cursor 中直接使用這個完整連結即可!

步驟 2:確保設計稿結構化

Figma MCP 的效果取決於設計稿的「結構化」程度。

設計師需要預先定義:

  1. Color Styles - 完整的顏色系統,使用語義化命名
  2. Text Styles - 所有文字樣式(Heading, Body, Button 等)
  3. Components - 使用 Auto Layout 和 Variants 管理元件狀態

重要: 所有 Styles 必須「發佈」(Publish to Library) 才能被讀取!

參考:Figma 官方 MCP Server 指南


4. 實際使用流程

情境 1:查詢元件設計規格

在 Cursor 中輸入:

@https://www.figma.com/design/YOUR_FILE_KEY/Crew-Up?node-id=xxx

請告訴我 "Button/Primary" 元件的所有設計規格:
- 背景顏色、文字顏色、圓角、內距、高度、字體

Cursor 會回應:

根據 Figma 設計規格,Button/Primary 元件的設計如下:

• 背景顏色: #C64508 (Base/orange/700)
• 文字顏色: #FAFAFA (Base/neutral/50)
• 圓角: 8px
• 內距: 水平 16px, 垂直 12px
• 高度: 48px
• 字體: 16px, Bold (700), Line height 150%

我看到專案中已有完整的設計系統:
• AppColors.actionPrimary (對應 orange/700)
• AppColors.textLight (對應 neutral/50)
• AppTypography.buttonLarge (已設定 16px, Bold)

建議使用專案的設計系統實作:

ElevatedButton(
  style: ElevatedButton.styleFrom(
    backgroundColor: AppColors.actionPrimary, // 使用設計 Token
    foregroundColor: AppColors.textLight,     // 使用設計 Token
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(AppSpacing.xs), // 8.0
    ),
    padding: EdgeInsets.symmetric(
      horizontal: AppSpacing.m,  // 16.0
      vertical: AppSpacing.s,    // 12.0
    ),
    minimumSize: Size.fromHeight(48.0),
  ),
  child: Text(
    '立即加入',
    style: AppTypography.buttonLarge, // 已包含正確的字體設定
  ),
  onPressed: () {},
)

優點: AI 不只告訴你 Figma 的數值,還會自動對應到專案中已定義的設計 Token!

情境 2:檢查設計一致性

@https://www.figma.com/design/YOUR_FILE_KEY/...?node-id=xxx
@lib/features/home/presentation/widgets/activity_card_widget.dart

請參考 Figma 設計,檢查這個 Widget 是否符合規格,如有不符請修正。

AI 會自動比對 Figma 設計與程式碼差異,並提供修正建議。

情境 3:組合多個上下文

@https://www.figma.com/design/YOUR_FILE_KEY/... 
@Codebase @Folder lib/features/

請檢查 features 資料夾中所有的 UI 元件,
比對 Figma 設計,找出不一致的地方。

組合多個 @ 符號,一次完成複雜的檢查任務!


💭 總結

核心價值

  • Cursor:@ 符號系統讓開發更高效,快速理解專案和程式碼
  • Figma MCP:在 Cursor 中直接查詢設計規格,減少視窗切換
  • 效率提升:UI 開發效率提升 2-3 倍,工作流程更流暢

最重要的收穫

AI 可以「看到」設計稿,讓設計迭代不再痛苦,團隊更願意追求設計的完美。

建議

適合使用 Figma MCP 的情境:

  • ✅ 專案有完整的 Figma 設計稿
  • ✅ 設計系統定義清楚(顏色、字體、間距等)
  • ✅ 團隊重視設計一致性
  • ✅ 專案會長期維護和迭代

可以先不用 Figma MCP 的情境:

  • 小型專案(< 10 個畫面)
  • 快速 MVP 開發
  • 設計稿尚未完成或經常大幅變動
  • 團隊對工具學習成本敏感

我在 Crew Up 專案中的反思

在實際整合 Cursor + Figma MCP 的過程中,有三個關鍵經驗值得分享:

1. 本地 MCP Server 需要先啟用

一開始測試時,我發現 Cursor 完全讀不到 Figma 設計,返回的都是空白內容。檢查了半天才發現:使用本地 MCP Server 時,需要在 Figma 桌面版中手動啟用!

修正方式:

  • 打開 Figma 桌面版
  • 進入 Figma → Preferences → Enable local MCP server
  • 確認底部顯示「Server running at http://127.0.0.1:3845/mcp

關鍵提醒:

  • ✅ Figma 桌面版必須保持開啟(關閉後 Server 就停止了)
  • ✅ 每次重開 Figma 後,Server 會自動啟動(如果已啟用)
  • ✅ 如果還是連不上,試著重新啟動 Cursor

這是使用本地 Server 最容易忽略的設定!

2. 設計系統思維很重要

在我們的經驗中,如果設計師沒有 Design SystemLibrary 的概念,Figma MCP 的效果會大打折扣。

為什麼? 因為會出現大量沒有定義清楚的 Magic Number:

// 設計稿上看到的數值
padding: EdgeInsets.all(14.0)  // 為什麼是 14?
fontSize: 15.5                 // 為什麼是 15.5?
borderRadius: 9.0              // 為什麼是 9?

這些隨意的數值會讓:

  • AI 無法對應到設計 Token
  • 程式碼充滿 Magic Number
  • 團隊無法維持一致性

我們的做法: 以「系統性」的方式解決問題:

  • 設計師:建立完整的 Design System(顏色、字體、間距等都有明確定義)
  • 開發者:將設計 Token 轉換成程式碼(AppColors, AppSpacing, AppTypography)
  • 共同維護:設計與程式碼的對應關係

Figma MCP 是放大器,不是魔法棒。 它能讓好的設計系統發揮更大價值,但無法修復沒有系統的混亂設計。

最大的啟發: Figma MCP 讓設計迭代變得不再痛苦,團隊更願意追求設計的完美,而不是為了省麻煩而妥協。

下一步

明天,我們將探討 Flutter 性能優化與監控,學習如何打造流暢的使用者體驗。

期待與您在 Day 29 相見!


📋 相關資源

Cursor 相關

Figma MCP 相關

Flutter & 設計系統

📝 專案資訊

  • 專案名稱: Crew Up!
  • 開發日誌: Day 28 - Cursor 進階功能 + Figma MCP:解決設計與開發的鴻溝
  • 文章日期: 2025-10-12
  • 技術棧: Cursor AI, Figma MCP, Flutter, Design System, 設計開發一體化

上一篇
Day 27 - Cursor + Claude 實戰指南:從 Agent 到 Commit 的完整開發流程
下一篇
Day 29 - Flutter 效能優化:從卡頓到流暢的實戰經驗
系列文
我的 Flutter 進化論:30 天打造「Crew Up!」的架構之旅30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言